import axios from 'axios'
import store from '@/store/index'
import router from '@/router/index'

// 导出基准地址，其他地方，有可能也需要基准地址
export const baseURL = 'http://pcapi-xiaotuxian-front-devtest.itheima.net/'
const instance = axios.create({
  timeout: 10000,
  baseURL
})

instance.interceptors.request.use((config) => {
  const profile = store.state.user.profile
  if (profile.token) {
    config.headers['Authorization'] = `Bearer ${profile.token}`
  }
  return config
}, err => {
  return Promise.reject(err)
})

instance.interceptors.response.use((res) => res.data, (err) => {

  // 401 状态码就是 登录无效
  if (err.response && err.response.status === 401) {
    // 1. 清空本地无效信息
    store.commit('user/setUser', {})
    // 2.跳转到登录页，并传参（当前路由地址，保证登录了，能跳回去）
    // 当前路由地址
    // 组件 /user?a=10 ， $route.path === /user， $route.fullPath ==== /user?a=10 是完整地址，包括 传递的参数
    // js 模块中 $router.currentRoute..value.fullPath 

    // 还有可能看到 什么 百分号。。什么的，需要进行转码
    const fullPath = encodeURIComponent(router.currentRoute.value.fullPath)
    router.push('/login?redirectUrl=' + fullPath)
  }
  return Promise.reject(err)
})
export default (url, method, submitData) => {
  // 负责发请求   地址 方式 数据
  return instance({
    url,
    method,
    // 如果是 get 则是   params
    // 如果不是  data
    // 可以这样写  const obj = {name:'ddg',age:20}   obj[10>9 ? 'name' : 'age']
    // [] 可以设置一个动态的  key ，中括号可以写 js 表达式  ， 最后是 js 表达式的执行结果当作 key
    [method.toLowerCase() === 'get' ? 'params' : 'data']: submitData
  })
}